home *** CD-ROM | disk | FTP | other *** search
- >From ahg@k.cc.purdue.edu Sun Jan 24 14:54:21 1988
- Path: leah!itsgw!nysernic!rutgers!princeton!udel!gatech!purdue!i.cc.purdue.edu!j.cc.purdue.edu!k.cc.purdue.edu!ahg
- From: ahg@k.cc.purdue.edu (Allen Braunsdorf)
- Newsgroups: comp.graphics
- Subject: (Source and test data for) IFS Explorer 1.0
- Keywords: by popular demand fascinating pictures new toys
- Message-ID: <2353@k.cc.purdue.edu>
- Date: 24 Jan 88 19:54:21 GMT
- Organization: 3-D Computer Graphics From Hell
- Lines: 822
-
-
- Since my posting, I have received about fifty requests for the source to
- my program. I also received a few notes from people looking for compression
- software. Unfortunately, I do not yet have such a program done.
-
- Below is the source to the latest version of my decompression program. It
- is a wonderful way to try out transforms just to see what they do. It's a
- little rough, and the documentation is a hack job, but I am sure many of you
- will find it interesting or useful.
-
- Also included are the data files from the Byte article (normalized to work in
- my system) and a few of my own. I can post information on how to make your
- own data files if there is a demand.
-
- If any of you make some neat ones, be sure to post them or send them to me!
-
- # This is a shell archive.
- # Remove everything above and including the cut line.
- # Then run the rest of the file through sh.
- #----cut here-----cut here-----cut here-----cut here----#
- #!/bin/sh
- # shar: Shell Archiver
- # Run the following text with /bin/sh to create:
- # README
- # Makefile
- # dev.h
- # ifs.h
- # rnd.h
- # ifs.c
- # a.ifs
- # archimedes.ifs
- # box.ifs
- # boxes.ifs
- # circle.ifs
- # cross.ifs
- # dragon.ifs
- # fern.ifs
- # ring.ifs
- # sierpinski.ifs
- # square.ifs
- # star.ifs
- # tree.ifs
- # triangle.ifs
- # This archive created: Sun Jan 24 14:45:24 1988
- # By: Allen Braunsdorf (3-D Computer Graphics From Hell)
- echo shar: extracting README '(6933 characters)'
- cat << \SHAR_EOF > README
- IFS Explorer 1.0 (C)1988 by Allen Braunsdorf (ahg@k.cc.purdue.edu)
-
- This program and its documentation may be freely copied and distributed for
- nonprofit uses.
-
-
- I. Introduction
-
- This program decodes iterated function systems (IFSs) into pictures
- by using the UNIX(trademark of AT&T Bell Laboratories) device independent plot
- libraries. It is designed to be simple to install and use, yet be powerful
- and interesting enough introduce the user to this fascinating new branch of
- mathematics.
-
- II. Installation
-
- If you do not have the plot library available, you will need to
- rewrite the graphic parts of the program. If this can be done gracefully
- (ie: without disturbing a large portion of the code), I would be interested in
- your patches, as they would likely be of use to many people.
-
- If you do have the plot library, look through the include file
- dev.h for your output device, or one similar. If you don't find it, either
- make up a definition and add it to dev.h, or set "DEV = GENERIC" in the
- Makefile. If you do find it (or decide to roll your own), place the
- appropriate name on the "DEV = " line of the Makefile.
-
- To make your own device definition, set as many of these as you know:
-
- XMIN, YMIN Left, bottom pixel
- XMAX, YMAX Right, top pixel
-
- These are usually unimportant to the program if you
- are using the plot library. Specification of these is mainly
- a convenience. XRES or YRES will be derived from these if
- they are given.
- The default values of these parameters are 0, 2047,
- 0, and 2047. This will make XRES = YRES = 2048.
-
- XRES, YRES Number of dots across, down on the device
-
- These are used by the program for scaling. If a value
- too large is chosen, the image will appear more slowly. If a
- value too small is chosen, the image will be grainy.
- If XMIN and XMAX are set, XRES will be set
- automatically to match their values.
- The default values of these parameters are 2048 and
- 2048. This should be large enough for most output devices.
-
- XASP, YASP How square the device is
- NTSC Is the device shaped like a TV?
-
- These parameters are real numbers. They are a measure
- of how wide and tall the output area is. If the graphics
- screen on your terminal were 10.5" by 8", you could define
- XASP as 10.5 and YASP as 8.0.
- If XFAC and YFAC are set, these values will be set to
- match.
- The default values for these parameters are 1.0 and
- 1.0 unless NTSC is defined. Then they are set to 4.0 and
- 3.0 (or something equivalent). This mimics a television's
- dimensions and is useful for personal computers.
-
- XFAC, YFAC How square a pixel is
-
- These tell how wide and tall a pixel is. If your
- pixels are taller than they are wide, and you don't set these
- right, everything will appear stretched on your screen. If
- you don't know what these are, just measure XASP and YASP
- properly.
- If XASP, YASP, XRES, and YRES are set, these values
- are derived.
- The default values for these parameters are 1.0 and
- 1.0.
-
- ONO Don't offset my screen!
-
- IFS Explorer works on a square screen. If your
- device isn't square, it will only use a part of it. If ONO
- is not defined, this region should be centered. If this
- isn't what you want [or it doesn't work!] define ONO.
-
- All of these parameters are set in the order that they are listed
- above. In other words, XRES is set by the time XFAC is decided on whether
- you did it or not.
- All of this magic happens in ifs.h. Look there for more details.
-
- Next, put the name or link option for your plot library on the
- "LIB = " line. This might look something like "LIB = -l4014" for a Tektronix
- 4014 terminal, or "LIB = -lex1000" for an Epson EX-1000 dot matrix printer.
-
- Next make sure RND is defined properly. See rnd.h for details. Add
- the proper definitions in rnd.h and Makefile.
-
- Finally, just type "make" and the program should compile.
-
- III. Format of input files
-
- The files used by this program are similar to the data sets shown in
- Barnsley, M. F. and Sloan, A. D. "A Better Way to Compress Images."
- Byte, January 1988, pp. 215-223.
-
- Each file consists of one or more transforms. Each transform has
- seven parameters, referred to as a, b, c, d, e, f, and p. These should
- be separated by white space, but are otherwise free format. The file
- should have one transform per line, and no blank lines. After the
- transforms, there is an additional line containing four numbers describing
- the scale and origin of the image. Every point in the image has its x
- coordinate multiplied by the first of these and added to the third before
- being scaled to the device and plotted. Every point in the image has its y
- coordinate multiplied by the second of these and added to the fourth before
- being scaled to the device and plotted. These can be used to zoom in on
- a particular part of an image for closer examination. These can also be
- used if the image turns out upside down (YMIN and YMAX should be adjusted
- first however).
- NOTE: The normalizing origin and scale parameters in the data file
- (those given on the last line) are NOT in device coordinates. The virtual
- screen used by this program has (0, 0) at the lower left and (1, 1) at the
- upper right. The origin is described in these terms.
- Also, the sum of all the p parameters (the last column) must be 1.0,
- or you will get an error.
-
- IV. Running
-
- IFS Explorer has one argument, the name of a data file to be plotted.
- If this is left out, you'll get a "Usage" message. Several example files are
- included with the program. Although all my data files have names that end
- with ".ifs", that suffix is not necessary (ie: your file could just be called
- "widget").
-
- The Explorer also has two options. "-n" followed by a number tells
- it how many points to plot (defaults to XRES*YRES). "-o" followed by a number
- tells it how many points to skip before it starts plotting points (defaults to
- ten).
-
- V. Future enhancements
-
- This program is still in its infancy, and it doesn't yet do everything
- I want it to. Here are a few things I hope to add soon (and to the Amiga
- version):
-
- Autoprobability If you don't know what to put for the last column,
- the program will generate something for you.
-
- Autoscaling If you don't know what to put for the last line,
- the program will find out for you.
-
- Autostop Will stop when the picture is done. (Boy, this would
- be nice!)
-
- Color Either with several bit planes, or some other trick.
-
- Multiple files Would plot several systems on the screen at once.
-
- Different input file formats are also being considered.
-
- If anyone has any suggestions, comments, questions, or bug reports
- about this program, please send them to me.
- Additionally, I am beginning work on an IFS compression program.
- It is unlikely to be done any time soon. Any additional information on
- this subject would be greatly appreciated.
-
- I hope you enjoy this program. It has been a real eye-opener for me.
-
-
- SHAR_EOF
- if test 6933 -ne "`wc -c README`"
- then
- echo shar: error transmitting README '(should have been 6933 characters)'
- fi
- echo shar: extracting Makefile '(453 characters)'
- cat << \SHAR_EOF > Makefile
- #
- # IFS Explorer 1.0 (C)1988 by Allen Braunsdorf (ahg@k.cc.purdue.edu)
- #
-
- #
- # Makefile Change this rather than the other files, if possible.
- #
- # Choose a DEV (and its associated LIB) from dev.h. Fill those in below.
- # Define a random number generator in rnd.h and note it below.
- #
-
- DEV = GENERIC
- LIB = -l4014
- RND = RANDOM
-
- CFLAGS = -s -O -D$(DEV) -D$(RND)
-
- all: ifs
-
- ifs: ifs.o
- cc -o ifs ifs.o $(LIB)
-
- ifs.o: ifs.c ifs.h dev.h rnd.h
-
- new:
- rm *.o ifs
- SHAR_EOF
- if test 453 -ne "`wc -c Makefile`"
- then
- echo shar: error transmitting Makefile '(should have been 453 characters)'
- fi
- echo shar: extracting dev.h '(915 characters)'
- cat << \SHAR_EOF > dev.h
- /*
- * IFS Explorer 1.0 (C)1988 by Allen Braunsdorf (ahg@k.cc.purdue.edu)
- *
- */
-
- /*
- * dev.h Device list for IFS Explorer 1.0
- *
- * Please add your favorite output device to the list below, or correct any
- * mistakes you believe exist herein. Mail me the product.
- *
- * For details on these parameters, read the documentation.
- *
- */
-
- /* Generic settings */
-
- /* Use this if you don't want to recompile when you change output devices */
- #ifdef GENERIC
- #define ONO
- #endif
-
- /* Amiga terminal program (has bugs apparently!) */
-
- #ifdef DBWTEK /* -l4014 */
- #define XRES 1028
- #define YRES 780
- #define XFAC 1.0
- #define YFAC 1.0
- #define ONO
- #endif
-
- /* Visual 550 terminal */
-
- #ifdef V550 /* -l4014 */
- #define XRES 1028
- #define YRES 780
- #define XFAC 1.0
- #define YFAC 1.0
- #define ONO
- #endif
-
- /* Epson EX-1000 printer */
-
- #ifdef EX1000 /* -lex1000 */
- #define XRES 864
- #define YRES 648
- #define XFAC 1.0
- #define YFAC 1.0
- #endif
- SHAR_EOF
- if test 915 -ne "`wc -c dev.h`"
- then
- echo shar: error transmitting dev.h '(should have been 915 characters)'
- fi
- echo shar: extracting ifs.h '(2540 characters)'
- cat << \SHAR_EOF > ifs.h
- /*
- * IFS Explorer 1.0 (C)1988 by Allen Braunsdorf (ahg@k.cc.purdue.edu)
- *
- */
-
- /*
- * ifs.h Intelligent include file for IFS Explorer 1.0
- *
- * Constants herein:
- *
- * XMIN Minimum X coordinate on output device
- * XMAX Maximum X coordinate on output device
- * YMIN Minimum Y coordinate on output device
- * YMAX Maximum Y coordinate on output device
- * XRES >= Number of pixels in X direction
- * YRES >= Number of pixels in Y direction
- * XASP Aspect ratio in X direction of whole screen
- * YASP Aspect ratio in Y direction of whole screen
- * XFAC Aspect ratio in X direction of pixel
- * YFAC Aspect ratio in Y direction of pixel
- * NTSC Device is NTSC (like a TV or most microcomputers)
- *
- * This file attempts to find reasonable values for omitted constants.
- * The safest thing to do is to define XRES, YRES, XFAC, and YFAC correctly.
- * The least safe (but hopefully OK) thing to do is to define NTSC if that
- * condition applies (width = height * 4/3), else nothing.
- * Define things in the Makefile rather than here if possible. Report
- * any problems to the author.
- *
- */
-
- #if (defined(XRES) && !defined(XMIN) && !defined(XMAX))
- # define XMAX (XRES-1)
- # define XMIN 0
- #endif
-
- #ifndef XMIN
- # if (defined(XRES) && defined(XMAX))
- # define XMIN ((XMAX)-(XRES-1))
- # else
- # define XMIN 0
- # endif
- #endif
-
- #ifndef XMAX
- # ifdef XRES
- # define XMAX ((XMIN)+(XRES-1))
- # else
- # define XMAX 2047
- # endif
- #endif
-
- #ifndef XRES
- # define XRES ((XMAX)-(XMIN)+1)
- #endif
-
- #if (defined(YRES) && !defined(YMIN) && !defined(YMAX))
- # define YMAX (YRES-1)
- # define YMIN 0
- #endif
-
- #ifndef YMIN
- # if (defined(YRES) && defined(YMAX))
- # define YMIN ((YMAX)-(YRES-1))
- # else
- # define YMIN 0
- # endif
- #endif
-
- #ifndef YMAX
- # ifdef YRES
- # define YMAX ((YMIN)+(YRES-1))
- # else
- # define YMAX 2047
- # endif
- #endif
-
- #ifndef YRES
- # define YRES ((YMAX)-(YMIN)+1)
- #endif
-
- #ifndef XASP
- # ifdef XFAC
- # define XASP ((XFAC)*(XRES))
- # else
- # ifdef YASP
- # define XASP YASP
- # ifdef NTSC
- # undef XASP
- # define XASP (4.0*YASP/3.0)
- # endif
- # else
- # define XASP 1.0
- # ifdef NTSC
- # undef XASP
- # define XASP 4.0
- # endif
- # endif
- # endif
- #endif
-
- #ifndef YASP
- # ifdef YFAC
- # define YASP ((YFAC)*(YRES))
- # else
- # define YASP XASP
- # ifdef NTSC
- # undef YASP
- # define YASP (3.0*XASP/4.0)
- # endif
- # endif
- #endif
-
- /* This is only right if ((XASP) > (YASP)), but it's fixed in main() */
-
- #ifndef XFAC
- # ifndef YFAC
- # define YFAC 1.0
- # endif
- # define XFAC (((XASP)*(YRES)*(YFAC))/((YASP)*(XRES)))
- #else
- # ifndef YFAC
- # define YFAC 1.0
- # endif
- #endif
- SHAR_EOF
- if test 2540 -ne "`wc -c ifs.h`"
- then
- echo shar: error transmitting ifs.h '(should have been 2540 characters)'
- fi
- echo shar: extracting rnd.h '(610 characters)'
- cat << \SHAR_EOF > rnd.h
- /*
- * IFS Explorer 1.0 (C)1988 by Allen Braunsdorf (ahg@k.cc.purdue.edu)
- *
- */
-
- /*
- * rnd.h How do I get a random number between 0 and 1 inclusive?
- *
- * Pick one of these and put it on the "RND = " line in the Makefile.
- * This list is terribly incomplete, but works on every machine 'round these
- * parts. If you have an important addition, send it to me.
- *
- */
-
- /* For BSD 4.3 */
-
- #ifdef RANDOM
- extern long random();
- #define RND (random()/2147483647.0)
- #endif
-
- /* For SYS V? At least at our house! */
-
- #ifdef ERAND48
- extern double erand48();
- unsigned short estuff[3];
- #define RND erand48(estuff)
- #endif
- SHAR_EOF
- if test 610 -ne "`wc -c rnd.h`"
- then
- echo shar: error transmitting rnd.h '(should have been 610 characters)'
- fi
- echo shar: extracting ifs.c '(3844 characters)'
- cat << \SHAR_EOF > ifs.c
- /*
- * IFS Explorer 1.0 (C)1988 by Allen Braunsdorf (ahg@k.cc.purdue.edu)
- *
- * All rights reserved worldwide. This program may be freely copied and
- * distributed for nonprofit uses. Any commercial use without express
- * permission of the author is forbidden, as is removing this notice.
- *
- */
-
- /*
- * ifs.c IFS Decoder by Allen Braunsdorf
- * based on information found in Byte 1988/01 pp. 215-223
- *
- * Throughout:
- * m Number of transforms
- * n Number of iterations
- * o Number of initial points omitted from plot
- * a-f IFS matrix coefficients
- * p[n] Probability of point being in transform n
- */
-
- #include <stdio.h>
-
- #include "dev.h"
- #include "ifs.h"
- #include "rnd.h"
-
- #define MAXLINE 80
-
- int
- main(argc, argv)
- int argc;
- char **argv;
- {
- extern char *calloc();
- extern double atof();
- extern void exit();
- void plot();
-
- char sbW[MAXLINE];
- FILE *in;
- float *a, *b, *c, *d, *e, *f, *p;
- float xs, ys, xt, yt;
- float pt = 0.0, pk, x = 0.0, y = 0.0, newx, newy, XFac, YFac, xo, yo;
- int o = 10, i, k, m = -1, n = XRES*YRES, arg = 1;
-
- /* Print version number */
-
- fprintf(stderr, "IFS Explorer 1.0 by Allen Braunsdorf\n");
-
- /* Correction for tall screens */
-
- XFac = XFAC;
- YFac = YFAC;
- if ((XASP) > (YASP)) {
- XFac /= YFac;
- YFac /= YFac;
- xo = (XRES*XFac-YRES*YFac)/(2.0*XFac);
- yo = 0.0;
- } else {
- XFac /= XFac;
- YFac /= XFac;
- xo = 0.0;
- yo = (YRES*YFac-XRES*XFac)/(2.0*YFac);
- }
- #ifdef ONO /* No offset */
- xo = 0.0;
- yo = 0.0;
- #endif
-
- if (2 > argc) {
- fprintf(stderr, "Usage: %s -n points -o omitted IFSfile\n",
- argv[0]);
- exit(-1);
- }
- while (arg < (argc-1)) {
- if ('-' == argv[arg][0]) {
- switch (argv[arg][1]) {
- case 'n':
- n = atoi(argv[++arg]);
- break;
- case 'o':
- o = atoi(argv[++arg]);
- break;
- default:
- fprintf(stderr, "Error: bad option \'%s\'\n",
- argv[arg]);
- exit(-1);
- }
- ++arg;
- } else {
- fprintf(stderr, "Error: one file only (for now)\n");
- exit(-1);
- }
- }
- n += o;
- fprintf(stderr, "Iterations: %d\n", n);
- fprintf(stderr, "Omitting: %d\n", o);
-
- if (NULL == (in = fopen(argv[arg], "r"))) {
- fprintf(stderr, "Error: can't open input file\n");
- exit(-1);
- }
- while (fgets(sbW, MAXLINE, in)) {
- ++m;
- }
- fclose(in);
-
- if (-1 == m) {
- fprintf(stderr, "Error: input file empty?!\n");
- exit(-1);
- }
- if (0 == m) {
- fprintf(stderr, "Error: input file invalid\n");
- exit(-1);
- }
- a = (float *)calloc((unsigned)m, sizeof(float));
- b = (float *)calloc((unsigned)m, sizeof(float));
- c = (float *)calloc((unsigned)m, sizeof(float));
- d = (float *)calloc((unsigned)m, sizeof(float));
- e = (float *)calloc((unsigned)m, sizeof(float));
- f = (float *)calloc((unsigned)m, sizeof(float));
- p = (float *)calloc((unsigned)m, sizeof(float));
-
- if (NULL == (in = fopen(argv[arg], "r"))) {
- fprintf(stderr, "Error: can't open input file\n");
- exit(-1);
- }
- fprintf(stderr, "Transforms: %d\n", m);
- for (i = 0; i < m; ++i) {
- fscanf(in, "%f %f %f %f %f %f %f", a+i, b+i, c+i, d+i,
- e+i, f+i, p+i);
- fprintf(stderr, "\t%f %f %f %f %f %f %f\n", a[i], b[i], c[i],
- d[i], e[i], f[i], p[i]);
- pt += p[i];
- p[i] = pt;
- }
- fscanf(in, "%f %f %f %f", &xs, &ys, &xt, &yt);
- fprintf(stderr, "Transforming by: %f %f %f %f\n", xs, ys, xt, yt);
- if ((0.01 < pt-1.0) || (0.01 < 1.0-pt)) {
- fprintf(stderr, "Error: nonunity probability: %f\n", pt);
- exit(-1);
- }
- fclose(in);
-
- space(XMIN, YMIN, XMAX, YMAX);
- openpl();
- erase();
- while (n--) {
- pk = RND;
- for (i = 0; i < m; ++i) {
- if (pk <= p[i]) {
- k = i;
- break;
- }
- }
- newx = a[k]*x+b[k]*y+e[k];
- newy = c[k]*x+d[k]*y+f[k];
- x = newx;
- y = newy;
- if (o) {
- --o;
- } else {
- plot((int)((x*xs*XFAC+xt)*(XRES-1)+xo)+XMIN,
- (int)((y*ys*YFAC+yt)*(YRES-1)+yo)+YMIN);
- }
- }
- closepl();
- }
-
- void
- plot(x, y)
- int x, y;
- {
- if ((XMIN <= x) && (YMIN <= y) && (XMAX >= x) && (YMAX >= y)) {
- point(x, y);
- }
- }
- SHAR_EOF
- if test 3844 -ne "`wc -c ifs.c`"
- then
- echo shar: error transmitting ifs.c '(should have been 3844 characters)'
- fi
- echo shar: extracting a.ifs '(126 characters)'
- cat << \SHAR_EOF > a.ifs
- 0.50 0.00 1.00 0.00 0.00 0.00 0.33
- 0.50 0.00 -1.00 0.00 0.50 1.00 0.33
- 0.50 0.00 0.00 0.00 0.25 0.50 0.34
- 1.00 1.00 0.00 0.00
- SHAR_EOF
- if test 126 -ne "`wc -c a.ifs`"
- then
- echo shar: error transmitting a.ifs '(should have been 126 characters)'
- fi
- echo shar: extracting archimedes.ifs '(102 characters)'
- cat << \SHAR_EOF > archimedes.ifs
- 0.9972772 0.0061192 -0.0061192 0.9972772 0.0 0.0 0.999
- 0.0 0.0 0.0 0.0 -1.0 0.0 0.001
- 0.5 0.5 0.5 0.5
- SHAR_EOF
- if test 102 -ne "`wc -c archimedes.ifs`"
- then
- echo shar: error transmitting archimedes.ifs '(should have been 102 characters)'
- fi
- echo shar: extracting box.ifs '(160 characters)'
- cat << \SHAR_EOF > box.ifs
- 0.50 0.50 0.00 0.00 0.00 0.00 0.25
- 0.50 0.50 0.00 0.00 0.00 1.00 0.25
- 0.00 0.00 0.50 0.50 0.00 0.00 0.25
- 0.00 0.00 0.50 0.50 1.00 0.00 0.25
- 1.00 1.00 0.00 0.00
- SHAR_EOF
- if test 160 -ne "`wc -c box.ifs`"
- then
- echo shar: error transmitting box.ifs '(should have been 160 characters)'
- fi
- echo shar: extracting boxes.ifs '(200 characters)'
- cat << \SHAR_EOF > boxes.ifs
- 0.50 0.50 0.00 0.00 0.00 0.00 0.166
- 0.50 0.50 0.00 0.00 0.00 1.00 0.166
- 0.00 0.00 0.50 0.50 0.00 0.00 0.166
- 0.00 0.00 0.50 0.50 1.00 0.00 0.166
- 0.50 0.00 0.00 0.50 0.25 0.25 0.336
- 1.00 1.00 0.00 0.00
- SHAR_EOF
- if test 200 -ne "`wc -c boxes.ifs`"
- then
- echo shar: error transmitting boxes.ifs '(should have been 200 characters)'
- fi
- echo shar: extracting circle.ifs '(103 characters)'
- cat << \SHAR_EOF > circle.ifs
- 0.9999811 -0.00613588 0.00613588 0.9999811 0.0 0.0 0.999
- 0.0 0.0 0.0 0.0 1.0 0.0 0.001
- 0.5 0.5 0.5 0.5
- SHAR_EOF
- if test 103 -ne "`wc -c circle.ifs`"
- then
- echo shar: error transmitting circle.ifs '(should have been 103 characters)'
- fi
- echo shar: extracting cross.ifs '(170 characters)'
- cat << \SHAR_EOF > cross.ifs
- -0.50 -0.50 0.00 0.00 0.50 0.00 0.25
- -0.50 -0.50 0.00 0.00 -0.50 0.00 0.25
- 0.00 0.00 -0.50 -0.50 0.00 0.50 0.25
- 0.00 0.00 -0.50 -0.50 0.00 -0.50 0.25
- 0.50 0.50 0.50 0.50
- SHAR_EOF
- if test 170 -ne "`wc -c cross.ifs`"
- then
- echo shar: error transmitting cross.ifs '(should have been 170 characters)'
- fi
- echo shar: extracting dragon.ifs '(81 characters)'
- cat << \SHAR_EOF > dragon.ifs
- 0.5 -0.5 0.5 0.5 1.0 0.0 0.5
- 0.5 -0.5 0.5 0.5 -1.0 0.0 0.5
- 0.1875 0.1875 0.5 0.5
- SHAR_EOF
- if test 81 -ne "`wc -c dragon.ifs`"
- then
- echo shar: error transmitting dragon.ifs '(should have been 81 characters)'
- fi
- echo shar: extracting fern.ifs '(163 characters)'
- cat << \SHAR_EOF > fern.ifs
- 0.00 0.00 0.00 0.16 0.00 0.00 0.01
- 0.20 -0.26 0.23 0.22 0.00 1.60 0.07
- -0.15 0.28 0.26 0.24 0.00 0.44 0.07
- 0.85 0.04 -0.04 0.85 0.00 1.60 0.85
- 0.10 0.10 0.50 0.00
- SHAR_EOF
- if test 163 -ne "`wc -c fern.ifs`"
- then
- echo shar: error transmitting fern.ifs '(should have been 163 characters)'
- fi
- echo shar: extracting ring.ifs '(75 characters)'
- cat << \SHAR_EOF > ring.ifs
- 0.8 0.6 -0.6 0.8 0.0 0.0 0.99
- 0.0 0.0 0.0 0.0 1.0 0.0 0.01
- 0.5 0.5 0.5 0.5
- SHAR_EOF
- if test 75 -ne "`wc -c ring.ifs`"
- then
- echo shar: error transmitting ring.ifs '(should have been 75 characters)'
- fi
- echo shar: extracting sierpinski.ifs '(125 characters)'
- cat << \SHAR_EOF > sierpinski.ifs
- 0.50 0.00 0.00 0.50 0.00 0.00 0.33
- 0.50 0.00 0.00 0.50 1.00 0.00 0.33
- 0.50 0.00 0.00 0.50 0.50 0.50 0.34
- 0.50 1.00 0.00 0.00
- SHAR_EOF
- if test 125 -ne "`wc -c sierpinski.ifs`"
- then
- echo shar: error transmitting sierpinski.ifs '(should have been 125 characters)'
- fi
- echo shar: extracting square.ifs '(160 characters)'
- cat << \SHAR_EOF > square.ifs
- 0.50 0.00 0.00 0.50 0.00 0.00 0.25
- 0.50 0.00 0.00 0.50 0.50 0.00 0.25
- 0.50 0.00 0.00 0.50 0.00 0.50 0.25
- 0.50 0.00 0.00 0.50 0.50 0.50 0.25
- 1.00 1.00 0.00 0.00
- SHAR_EOF
- if test 160 -ne "`wc -c square.ifs`"
- then
- echo shar: error transmitting square.ifs '(should have been 160 characters)'
- fi
- echo shar: extracting star.ifs '(143 characters)'
- cat << \SHAR_EOF > star.ifs
- 0.3090169 -0.9510565 0.9510565 0.3090169 0.0 0.0 0.85
- -0.999 0.0 0.0 0.0 0.0 0.3249196 0.10
- 0.0 0.0 0.0 0.0 1.0 0.3249196 0.05
- 0.5 0.5 0.5 0.5
- SHAR_EOF
- if test 143 -ne "`wc -c star.ifs`"
- then
- echo shar: error transmitting star.ifs '(should have been 143 characters)'
- fi
- echo shar: extracting tree.ifs '(162 characters)'
- cat << \SHAR_EOF > tree.ifs
- 0.00 0.00 0.00 0.50 0.00 0.00 0.05
- 0.10 0.00 0.00 0.10 0.00 0.20 0.15
- 0.42 -0.42 0.42 0.42 0.00 0.20 0.40
- 0.42 0.42 -0.42 0.42 0.00 0.20 0.40
- 2.00 2.00 0.50 0.00
- SHAR_EOF
- if test 162 -ne "`wc -c tree.ifs`"
- then
- echo shar: error transmitting tree.ifs '(should have been 162 characters)'
- fi
- echo shar: extracting triangle.ifs '(103 characters)'
- cat << \SHAR_EOF > triangle.ifs
- -1.0 0.0 0.0 0.0 1.0 0.0 0.34
- 0.5 0.0 0.866 0.0 0.0 0.0 0.33
- 0.5 0.0 -0.866 0.0 0.5 0.866 0.33
- 1 1 0 0
- SHAR_EOF
- if test 103 -ne "`wc -c triangle.ifs`"
- then
- echo shar: error transmitting triangle.ifs '(should have been 103 characters)'
- fi
- # End of shell archive
- exit 0
-
- Allen Braunsdorf WORK k.cc.purdue.edu!ahg
- General Consultant SCHOOL ei.ecn.purdue.edu!braunsdo
- Purdue University Computing Center HOME ee.ecn.purdue.edu!gawk!akb
-
-
-